package com.product.android.ui.showImage;

import java.util.ArrayList;

import uk.co.senab.photoview.PhotoView;
import android.app.Activity;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.common.android.ui.gif.GifImageView;
import com.nd.android.u.allcommon.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.product.android.ui.imageHolder.CircleProgress;
import com.product.android.ui.imageHolder.PictureHolder;

/**
 * 用于浏览图片的适配器
 * 
 * <br>Created 2014年9月24日 下午5:21:46
 * @version  
 * @author   林时苗		
 *
 * @see 	 
 * 
 * Copyright(c) 2009-2014, TQ Digital Entertainment, All Rights Reserved
 *
 */
public class FlowImageAdapter extends PagerAdapter implements OnClickListener {

	private ArrayList<CommonImage> mImgList = null;  //保存图片信息
	private boolean mIsLocalUri=false; //判断图片来源（网络或本地）
	private ArrayList<PictureHolder> mHolderList = new ArrayList<PictureHolder>();
	private Context mContext = null;
	private DisplayImageOptions mDisplayImageOpt = null;
	
	/**
	 * 
	 * Creates a new instance of FlowImageAdapter.
	 * <br>Created 2014年9月24日 下午5:17:10
	 * @param context context
	 * @param imgList imgList
	 * @param isLocalUri isLocalUri
	 * @param displayImageOpt displayImageOpt
	 */
	public FlowImageAdapter(Context context, ArrayList<CommonImage> imgList,
			boolean isLocalUri, DisplayImageOptions displayImageOpt) {
		super();
		mContext = context;
		mImgList = imgList;
		mIsLocalUri = isLocalUri;
		mDisplayImageOpt = displayImageOpt;
	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:17:41
	 * @return
	 * @author       林时苗
	 */
	@Override
	public int getCount() {
		return mImgList.size();
	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:17:52
	 * @param container
	 * @param position
	 * @param object
	 * @author       林时苗
	 */
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		if(object instanceof View){
			View v = (View)object;
			if(v.getTag() instanceof PictureHolder){
				//停止GIF线程
				((PictureHolder)v.getTag()).gifPicture.quit();
				((PictureHolder)v.getTag()).gifPicture.recycle();
			}
			mHolderList.remove(v.getTag());
			container.removeView(v);
		}
	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:17:58
	 * @param container
	 * @param position
	 * @return
	 * @author       林时苗
	 */
	@Override
	public View instantiateItem(ViewGroup container, int position) {
		final CommonImage img = (CommonImage) getItem(position);
		final PictureHolder holder = new PictureHolder();

		View view = View.inflate(mContext, R.layout.picture_flow_item,
				null);
		view.findViewById(R.id.fragment_pic_layout).setOnClickListener(this);

		holder.pos = position;
		holder.rlProgress = (RelativeLayout) view.findViewById(R.id.rlProgress);
		holder.cpProgress = (CircleProgress) view.findViewById(R.id.cpProgress);
		holder.ivPicture = (PhotoView) view.findViewById(R.id.ivPicture);
		holder.gifPicture = (GifImageView) view.findViewById(R.id.gifPicture);
		holder.image_ext = img.image_ext;
		holder.isLocalUrl = mIsLocalUri;
		
		if(!mIsLocalUri){
			//网络图片用centerCrop模式
			holder.ivPicture.setScaleType(ImageView.ScaleType.CENTER_CROP);
		}else{
			//本地图片用fitCenter模式
			holder.ivPicture.setScaleType(ImageView.ScaleType.FIT_CENTER);
		}
		
		view.setTag(holder);
		mHolderList.add(holder);
		try {
			holder.showImage(img.image_thumb, img.image_original,
					mDisplayImageOpt);
		} catch (OutOfMemoryError e) {
			e.printStackTrace();
		}
		if (holder.isGif()) {// 如果是GIF，使用GIF控件响应关闭的事件
			holder.gifPicture.setOnClickListener(this);
		}
		container.addView(view, LayoutParams.MATCH_PARENT,
				LayoutParams.MATCH_PARENT);
		return view;

	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:18:06
	 * @param arg0
	 * @param arg1
	 * @return
	 * @author       林时苗
	 */
	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return (arg0==arg1);
	}
	
	
	/**
	 * 注意必需现实这个函数，父类默认返回 POSITION_UNCHANGED
	 * 
	 * <br>Created 2014年9月24日 下午5:18:55
	 * @param object
	 * @return
	 * @author       林时苗
	 */
	@Override
	public int getItemPosition(Object object) {
		return POSITION_NONE;
	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:19:35
	 * @param v
	 * @author       林时苗
	 */
	@Override
	public void onClick(View v) {
		int id = v.getId();
		if (id == R.id.gifPicture || id == R.id.fragment_pic_layout) {
			if (mContext instanceof Activity) {
				((Activity) mContext).finish();
			}
		}

	}

	/**
	 * 
	 * 
	 * <br>Created 2014年9月24日 下午5:19:44
	 * @param position
	 * @return
	 * @author       林时苗
	 */
	public Object getItem(int position) {
		if (position < mImgList.size()) {
			return mImgList.get(position);
		} else {
			return null;
		}
	}
	
	
	
	/**
	 * 退出界面时一定要停止GIF线程
	 * @n<b>函数名称</b>     :Destroy
	 * @brief
	 * @see
	 * @since    Ver 1.1
	 * @param  
	 * @return void
	 * @<b>作者</b>          :  黄永鑫
	 * @<b>创建时间</b>      :  2013-12-20上午11:52:36
	 */
	public void Destroy(){
		for(PictureHolder holder: mHolderList){
			holder.gifPicture.recycle();
		}
	}
	/**
	 * 只退出，不销毁
	 * @n<b>函数名称</b>     :justQuit
	 * @brief
	 * @see
	 * @since    Ver 1.1
	 * @param  
	 * @return void
	 * @<b>作者</b>          :  chenqian
	 * @<b>创建时间</b>      :  2014-6-13下午12:38:33
	 */
	public void justQuit(){
		for(PictureHolder holder: mHolderList){
			holder.gifPicture.quit();
		}
	}
	
}
